package com.gradumate.shared;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * 
 * @author HugoZonderland
 * 
 * De klasse bouwt een tree op waarin alle opleidingen per instituut per facutleit zijn opgenomen.
 *
 */
public class OpleidingPerFaculteitOverzicht {
	
	//				<<fac>	<<instituut>,		<opleiding>>>
	private HashMap<String, HashMap<String, ArrayList<String>>> root;
	private ArrayList<String> faculteiten, instiuten;
	//				<fac>	<inst>
	private HashMap<String, ArrayList<String>> faculteitInstituten;
	
	/**
	 * Constructor maakt de ROOT array aan.
	 */
	public OpleidingPerFaculteitOverzicht() {
		// Faculteiten toevoegen
		faculteiten = new ArrayList<String>();
		faculteiten.add("FNT");
		
		// Instituten toevoegen
		instiuten = new ArrayList<String>();
		instiuten.add("Institute For Information And Communication Technology");
		
		// Eerste Instituten toevogen aan HashMap
		faculteitInstituten = new HashMap<String, ArrayList<String>>();
		faculteitInstituten.put("FNT", instiuten);
		
		// root initialiseren.
		root = new HashMap<String, HashMap<String, ArrayList<String>>>();
		for (String faculteit : faculteiten) {
			ArrayList<String> instituten = faculteitInstituten.get(faculteit);
			for (String instituut : instituten) {
				root.put("FNT", getOpleidingen(instituut));
			}
		}
	}
	
	/**
	 * Stuurt de Hashmap terug 
	 * @return HashMap<String, HashMap<String, ArrayList<String>> met alle opleidingen per faculteit
	 */
	public HashMap<String, ArrayList<String>> getOpleidingPerFaculteitOverzicht(String faculteit) {
		return root.get(faculteit);
	}
	
	/**
	 * Haalt de opleidingen per faculteit en instituut op
	 * @param Strung faculteit
	 * @param String instituut
	 * @return return ArrayList<String> met opleidingen
	 */
	public ArrayList<String> getOpleidingenByFaculteitAndInstituut(String faculteit, String instituut) {
		return root.get(faculteit).get(instituut);	
	}
	
	/**
	 * Stuurt een ArrayList terug met alle faculteten
	 * @return ArrayList<String> met faculteiten
	 */
	public ArrayList<String> getFaculteiten() {
		return faculteiten;
	}
	
	/**
	 * Haalt alle instituten op die gekoppeld zijn aan een faculteit
	 * @param String faculteit
	 * @return ArrayList<String> met alle instituten gekoppeld aan de faculteit
	 */
	public ArrayList<String> getInstitutenByFaculteit(String faculteit) {
		return faculteitInstituten.get(faculteit);
	}
	
	/**
	 * Voegt alle opleidingen van de ICT toe aan de array en geeft die terut
	 * @return HashMap<String, ArrayList<String> met per instituut de opleidingen
	 */
	private HashMap<String, ArrayList<String>> getOpleidingen(String instituut) {
		HashMap<String, ArrayList<String>> toReturn = new HashMap<String, ArrayList<String>>();
		ArrayList<String> opleidingen = new ArrayList<String>();
		
		if (instituut.equals("Institute For Information And Communication Technology")) {
			opleidingen.add("Bedrijfskundige Informatica");
			opleidingen.add("Informatica");
			opleidingen.add("Information Engineering");
			opleidingen.add("Systeembeheer");
			opleidingen.add("Technische Informatica");
		}
		
		toReturn.put(instituut, opleidingen);
		
		return toReturn;
	}
}
